#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件IO操作

# 语法
# file object = open(file_name [, access_mode][, buffering])
# file_name：file_name变量是一个包含了你要访问的文件名称的字符串值。
# access_mode：access_mode决定了打开文件的模式：只读，写入，追加等。
# 所有可取值见如下的完全列表。这个参数是非强制的，默认文件访问模式为只读(r)。
# buffering:如果buffering的值被设为0，就不会有寄存。如果buffering的值取1，访问文件时会寄存行。
# 如果将buffering的值设为大于1的整数，表明了这就是的寄存区的缓冲大小。如果取负值，寄存区的缓冲大小则为系统默认。

# File对象的属性
# 一个文件被打开后，你有一个file对象，你可以得到有关该文件的各种信息。

# 以下是和file对象相关的所有属性的列表：
# file.closed	返回true如果文件已被关闭，否则返回false。
# file.mode	返回被打开文件的访问模式。
# file.name	返回文件的名称。
# file.softspace	如果用print输出后，必须跟一个空格符，则返回false。否则返回true。

# 打开一个文件
fo = open("foo.txt", "w")
print("文件名: ", fo.name)
print("是否已关闭 : ", fo.closed)
print("访问模式 : ", fo.mode)

# close()方法

# 打开一个文件
fo = open("foo.txt", "w")
print("文件名: ", fo.name)

# 关闭打开的文件
fo.close()

# write()方法
# write()方法可将任何字符串写入一个打开的文件。需要重点注意的是，Python字符串可以是二进制数据，而不是仅仅是文字。

# write()方法不会在字符串的结尾添加换行符('\n')：
# 打开一个文件
fo = open("foo.txt", "w")
fo.write("icanci.gitee.com")

# 关闭打开的文件
fo.close()

# read()方法
# read（）方法从一个打开的文件中读取一个字符串。需要重点注意的是，Python字符串可以是二进制数据，而不是仅仅是文字。
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print("读取的字符串是 : ", str)
# 关闭打开的文件
fo.close()

# 文件定位
# tell()方法告诉你文件内的当前位置, 换句话说，下一次的读写会发生在文件开头这么多字节之后。
# seek（offset [,from]）方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
# 如果from被设为0，这意味着将文件的开头作为移动字节的参考位置。如果设为1，则使用当前的位置作为参考位置
# 如果它被设为2，那么该文件的末尾将作为参考位置。

# 打开一个文件
print("==============华丽的分割线==============")
fo = open("foo.txt", "r+")
str = fo.read(10)
print("读取的字符串是 : ", str)

# 查找当前位置
position = fo.tell()
print("当前文件位置 : ", position)

# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print("重新读取字符串 : ", str)
# 关闭打开的文件
fo.close()

# 重命名和删除文件
# Python的os模块提供了帮你执行文件处理操作的方法，比如重命名和删除文件。
# 要使用这个模块，你必须先导入它，然后才可以调用相关的各种功能。
# rename()方法：
# rename()方法需要两个参数，当前的文件名和新文件名。

import os

# 重命名文件test1.txt到test2.txt。

# os.rename("test1.txt", "test2.txt") # 如果没有文件则报错 FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'test1.txt' -> 'test2.txt'

# remove()方法
# 你可以用remove()方法删除文件，需要提供要删除的文件名作为参数。

# 删除一个已经存在的文件test3.txt
# os.remove("test3.txt") # 如果没有 FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'test3.txt'

# mkdir()方法
# 可以使用os模块的mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。

# 创建目录test
# os.mkdir("test") # 如果已经存在 FileExistsError: [WinError 183] 当文件已存在时，无法创建该文件。: 'test'

# getcwd()方法：
# getcwd()方法显示当前的工作目录。
print("当前目录地址：", os.getcwd())

# chdir()方法
# 可以用chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。
# 将当前目录改为"/home/newdir"

os.chdir("E:/PyHome/Python-Basics/cn/icanci")
print("当前目录地址：", os.getcwd())

# rmdir()方法
# rmdir()方法删除目录，目录名称以参数传递。
# 在删除这个目录之前，它的所有内容应该先被清除\
os.chdir("E:\PyHome\Python-Basics\cn\icanci\文件\IO流")
os.rmdir("test")
